# 折线图练习题代码
# 1. 基础折线图
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 50)
y = np.sin(x)

plt.plot(x, y)
plt.title("正弦函数")
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.show()
plt.plot(
    x, y, color="red", linestyle="--", marker="o", markerfacecolor="blue", linewidth=2
)
plt.title("带样式的正弦函数")
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.show()
# 3. 多线对比
y_cos = np.cos(x)

plt.plot(x, y, "b--", label="sin(x)")
plt.plot(x, y_cos, "r-", label="cos(x)")
plt.title("正弦和余弦函数对比")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid(True)
plt.show()
"""
# 饼图练习题代码
# 1. 基础饼图
# python
sizes = [15, 30, 45, 10, 20]
labels = ["A", "B", "C", "D", "E"]

plt.pie(sizes, labels=labels)
plt.title("基础饼图示例")
plt.show()
# 2. 样式修改
colors = ["red", "blue", "green", "yellow", "purple"]
explode = (0, 0, 0.1, 0, 0)  # 突出第三部分

plt.pie(
    sizes, labels=labels, colors=colors, explode=explode, autopct="%1.1f%%", shadow=True
)
plt.title("带样式的饼图")
plt.show()
# 3. 环形饼图
plt.pie(
    sizes, labels=labels, colors=colors, autopct="%1.1f%%", wedgeprops={"width": 0.4}
)
plt.title("环形饼图")
plt.text(0, 0, "销售占比", ha="center", va="center")
plt.show()
# 直方图练习题代码
# 1. 基础直方图
python
data = np.random.normal(0, 1, 1000)

plt.hist(data, bins=20)
plt.title("正态分布数据直方图")
plt.show()
# 2. 样式修改
plt.hist(data, bins=20, color="green", edgecolor="black", alpha=0.7, density=True)
plt.title("带样式的直方图")
# 添加密度曲线
from scipy.stats import norm

x = np.linspace(-4, 4, 100)
plt.plot(x, norm.pdf(x), "r-")
plt.show()
# 3. 多组数据对比
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(2, 1.5, 1000)

plt.hist(data1, bins=20, alpha=0.5, label="均值0")
plt.hist(data2, bins=20, alpha=0.5, label="均值2")
plt.title("两组数据对比")
plt.legend()
plt.show()
# Subplot 综合练习题代码
# 1. 基础subplot
plt.figure(figsize=(10, 8))

# 子图1 - 折线图
plt.subplot(2, 2, 1)
plt.plot(x, y)
plt.title("正弦函数")

# 子图2 - 饼图
plt.subplot(2, 2, 2)
plt.pie(sizes, labels=labels)
plt.title("饼图示例")

# 子图3 - 直方图
plt.subplot(2, 2, 3)
plt.hist(data, bins=20)
plt.title("直方图示例")

# 子图4 - 散点图
plt.subplot(2, 2, 4)
plt.scatter(x, y)
plt.title("散点图示例")

plt.tight_layout()
plt.show()
# 2. 共享坐标轴
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)

ax1.plot(x, y)
ax1.set_title("sin(x)")
ax1.grid(True)

ax2.plot(x, y_cos)
ax2.set_title("cos(x)")
ax2.grid(True)

plt.tight_layout()
plt.show()
# 3. 复杂布局
# python
# import matplotlib.gridspec as gridspec

# plt.figure(figsize=(10, 5))
# gs = gridspec.GridSpec(1, 2, width_ratios=[2, 1])

# # 左侧大图 - 直方图
# ax1 = plt.subplot(gs[0])
# ax1.hist(data1, bins=20, alpha=0.7)
# ax1.set_title("直方图")

# # 右侧上方小图 - 折线图
# ax2 = plt.subplot(gs[1])
# ax2.plot(x, y)
# ax2.set_title("正弦函数")

# # 右侧下方小图 - 饼图
# ax3 = plt.subplot(gs[3])
# ax3.pie(sizes, labels=labels)
# ax3.set_title("饼图")

# plt.tight_layout()
# plt.show()
# 4. 综合图表
plt.figure(figsize=(15, 5))

# 子图1 - 折线图
plt.subplot(1, 3, 1)
plt.plot(x, y, "b-", label="sin(x)")
plt.plot(x, y_cos, "r--", label="cos(x)")
plt.title("三角函数对比")
plt.legend()
plt.grid(True)

# 子图2 - 饼图
plt.subplot(1, 3, 2)
explode = (0, 0, 0.1, 0, 0)  # 突出最大值
plt.pie(sizes, labels=labels, explode=explode, autopct="%1.1f%%")
plt.title("占比分析")

# 子图3 - 直方图
plt.subplot(1, 3, 3)
plt.hist(data1, bins=20, density=True, alpha=0.7)
plt.plot(x, norm.pdf(x), "r-")
plt.title("数据分布")

plt.suptitle("综合图表展示", fontsize=16)
plt.tight_layout()
plt.show()
"""
